package xin.yangshuai.leetcode01.question32;

//给你一个只包含 '(' 和 ')' 的字符串，找出最长有效（格式正确且连续）括号
//子串
//的长度。
//
//
//
//示例 1：
//
//输入：s = "(()"
//输出：2
//解释：最长有效括号子串是 "()"
//
//示例 2：
//
//输入：s = ")()())"
//输出：4
//解释：最长有效括号子串是 "()()"
//
//示例 3：
//
//输入：s = ""
//输出：0
//
//
//
//提示：
//
//    0 <= s.length <= 3 * 104
//    s[i] 为 '(' 或 ')'

public class Question32 {

    public static void main(String[] args) {

        Solution solution = new Question32().new Solution();
        int i = solution.longestValidParentheses("((()))())");
        System.out.println(i);
    }

    class Solution {
        public int longestValidParentheses(String s) {

            int length = s.length();
            int[] intArray = new int[length];
            char[] charArray = s.toCharArray();


            // 两个索引之间空几个
            for (int i = 0; i < s.length(); i += 2) {

                for (int j = 0; j < s.length(); j++) {
                    // k，结束的索引
                    int k = j + i + 1;
                    if (k < s.length()) {
                        if (intArray[j] == 0 && intArray[k] == 0) {
                            if (charArray[j] == '(' && charArray[k] == ')') {
                                for (int l = j + 1; l < k; l++) {
                                    if (intArray[l] == 0) {
                                        break;
                                    }
                                }
                                intArray[j] = 1;
                                intArray[k] = 1;
                            }
                        }
                    }
                }
            }

            int max = 0;
            int current = 0;
            for (int i : intArray) {
                if (i == 0) {
                    if (current > max) {
                        max = current;
                    }
                    current = 0;
                } else {
                    current++;
                }
            }
            if (current > max) {
                max = current;
            }

            return max;
        }
    }
}
